package solutions.ferpa.ztest.intf;

import br.com.telescope.adsrt.dom.DomId;
import br.com.telescope.adsrt.dom.DomInteger;
import br.com.telescope.adsrt.dom.DomOpcao;
import br.com.telescope.adsrt.dom.DomOption;
import br.com.telescope.adsrt.dom.DomText;
import br.com.telescope.adsrt.dom.DomTextLong;
import br.com.telescope.adsrt.dom.DomUpper;
import br.com.telescope.adsrt.lib.AdsException;
import br.com.telescope.adsrt.lib.Field;
import br.com.telescope.adsrt.lib.Form;
import br.com.telescope.sql.ModelQuery;
import br.com.telescope.t2.ServiceModel;
import br.com.telescope.t2.feature.ListFeature;
import br.com.telescope.t2.feature.ViewFeature;
import br.com.telescope.util.ObjectUtil;
import java.util.ArrayList;
import java.util.List;
import solutions.ferpa.ztest.ent.*;

/**
 * Hidrômetros relacionados para os ensaios.
 * <p>
 * Interface para manutenção de Hidrômetro relacionado para o ensaio
 * <P>
 * Telescope origin: ZTEST.CAD_HIDROMETRO_ENSAIO
 * <P>
 * Base entity: ZTEST.HIDROMETRO_ENSAIO
 * <P>
 * @author TELESCOPE - Build task T2 Web Interface Generator
 * <P>
 * @version 0.1
 */
public class CadHidrometroEnsaio extends ServiceModel {
    
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    public static final String GLOBAL_NAME = "ZTEST.CAD_HIDROMETRO_ENSAIO";
    
    @Override
    public String globalName() {
        return GLOBAL_NAME;
    }
    
    {
        setTitle("Hidrômetros relacionados para os ensaios");
    }
    
    protected EntHidrometroEnsaio base;
    protected EntMotivoAprovaReprovaEnsaio mtra;
    protected EntHidrometroEnsaio rec; // NEED_TJW1_COMPATIBILITY
    
    // Service parameters
    private DomId pIdEnsaioBancada;
    
    // Record items
    private DomInteger aPosicaoModelo;
    private DomOption aDestino;
    private DomOpcao aSituacao;
    private DomOpcao aSituacaoInformada;
    private DomTextLong aParecer;
    private DomText aNumeroSerie;
    private DomId aId;
    private DomId aEnsaioBancadaId;
    private DomId aMotivoAprovaoReprovaId;
    private DomId aHidrometroId;
    private DomUpper aMtraMotivo;
    private DomTextLong aMtraDescricao;
    
    // Query items
    
    @Override
    public String getBaseSql() {
        return "select BASE.*"
                + " , MTRA.MOTIVO as MTRA_MOTIVO"
                + " , MTRA.DESCRICAO as MTRA_DESCRICAO"
                + " , MTRA.ID as Z_MTRA_ID"
                + " from HIDROMETRO_ENSAIO BASE"
                + " left join MOTIVO_APROVA_REPROVA_ENSAIO MTRA on MTRA.ID = BASE.MOTIVO_APROVAO_REPROVA_ID";
    }
    
    @Override
    public void initAttributes() {
        
        aPosicaoModelo = new DomInteger();
        aPosicaoModelo.context(ctx).name("POSICAO_MODELO").label("Posição do modelo");
        
        aDestino = new DomOption();
        aDestino.context(ctx).name("DESTINO").label("Destino (após ensaio)").group(true);
        aDestino.addOption("C", "Liberado para o Cliente");
        aDestino.addOption("E", "Liberado para o Estoque");
        aDestino.addOption("M", "Retornou para montagem");
        aDestino.addOption("A", "Aguardando inicio do ensaio");
        aDestino.setDefaultValue("A");
        
        aSituacao = new DomOpcao();
        aSituacao.context(ctx).name("SITUACAO").label("Situação").group(true);
        aSituacao.addOption("E", "Em ensaio");
        aSituacao.addOption("A", "Aprovado");
        aSituacao.addOption("R", "Reprovado");
        aSituacao.setDefaultValue("E");
        
        aSituacaoInformada = new DomOpcao();
        aSituacaoInformada.context(ctx).name("SITUACAO_INFORMADA").label("Situação informada").group(true);
        aSituacaoInformada.addOption("A", "Aprovado");
        aSituacaoInformada.addOption("R", "Reprovado");
        
        aParecer = new DomTextLong();
        aParecer.context(ctx).name("PARECER").label("Parecer sobre o motivo");
        
        aNumeroSerie = new DomText();
        aNumeroSerie.context(ctx).name("NUMERO_SERIE").label("Número de série do hidrômetro");
        
        aId = new DomId();
        aId.context(ctx).name("ID").label("Id");
        
        aEnsaioBancadaId = new DomId();
        aEnsaioBancadaId.context(ctx).name("ENSAIO_BANCADA_ID").label("Ensaio da bancada");
        
        aMotivoAprovaoReprovaId = new DomId();
        aMotivoAprovaoReprovaId.context(ctx).name("MOTIVO_APROVAO_REPROVA_ID").label("Motivo de aprovação e reprovação");
        
        aHidrometroId = new DomId();
        aHidrometroId.context(ctx).name("HIDROMETRO_ID").label("Hidrômetro aprovado");
        
        aMtraMotivo = new DomUpper();
        aMtraMotivo.context(ctx).name("MTRA_MOTIVO").label("Motivo (aprovação/reprovação)");
        aMtraMotivo.setListOfValuesQuery(createQuery()
                .select("*")
                .from("(SELECT MOTIVO as valor"
                + " , MOTIVO as pesquisar"
                + " , MOTIVO as descricao"
                + " from MOTIVO_APROVA_REPROVA_ENSAIO MTRA)", "q"));
        aMtraMotivo.setAutocompleteLength(0);
        
        aMtraDescricao = new DomTextLong();
        aMtraDescricao.context(ctx).name("MTRA_DESCRICAO").label("Descrição do motivo");
        aMtraDescricao.setListOfValuesQuery(createQuery()
                .select("*")
                .from("(SELECT DESCRICAO as valor"
                + " , DESCRICAO as pesquisar"
                + " , DESCRICAO as descricao"
                + " from MOTIVO_APROVA_REPROVA_ENSAIO MTRA)", "q"));
        aMtraDescricao.setAutocompleteLength(0);
        
    }
    
    @Override
    public void initParameters() {
        pIdEnsaioBancada = new DomId(ctx, "ID_ENSAIO_BANCADA", "Ensaio da bancada");
        pIdEnsaioBancada.setValue(ctx.getParameter("P_ID_ENSAIO_BANCADA"));
        pIdEnsaioBancada.setSqlExpression("ENSAIO_BANCADA_ID");
        if (pIdEnsaioBancada.isNotNull()) {
            aEnsaioBancadaId.setValue(pIdEnsaioBancada.getValue());
        }
    }
    
    @Override
    public List<Field> getParameters() {
        if (allParameters == null) {
            allParameters = new ArrayList<Field>();
            allParameters.add(pIdEnsaioBancada);
        }
        return allParameters;
    }
    
    @Override
    public void copyBindParameters() {
        EntHidrometroEnsaio record = getRecord();
        if (pIdEnsaioBancada.isNotNull()) {
            record.setEnsaioBancadaId(pIdEnsaioBancada.getValue());
        }
    }
    
    @Override
    public void retrieveBindParameters() {
        pIdEnsaioBancada.setValue(getRecord().valueOfEnsaioBancadaId());
    }
    
    @Override
    public String getQueryPkColumn() {
        return "BASE.ID";
    }
    
    @Override
    public void setId(String value) {
        this.aId.setValue(value);
    }
    
    @Override
    public EntHidrometroEnsaio getRecord() {
        if (base == null) {
            base = new EntHidrometroEnsaio(ctx);
            rec = base;
        }
        return this.base;
    }
    
    @Override
    public String getContextName() {
        return aPosicaoModelo.toText();
    }
    
    @Override
    public String getDefaultOrderBy() {
        return "POSICAO_MODELO, DESTINO, SITUACAO, SITUACAO_INFORMADA";
    }
    
    @Override
    public void translateInsertFks(Form form) {
        ModelQuery query;
        
        // MOTIVO_APROVAO_REPROVA_ID
        try {
            if (form.hasFields("MTRA_MOTIVO", "MTRA_DESCRICAO")) {
                query = createQuery()
                        .select("MTRA.ID")
                        .from("MOTIVO_APROVA_REPROVA_ENSAIO", "MTRA")
                        .filter("MTRA.MOTIVO", form.get("MTRA_MOTIVO"))
                        .filter("MTRA.DESCRICAO", form.get("MTRA_DESCRICAO"))
                        ;
                base.setMotivoAprovaoReprovaId(ObjectUtil.toLong(translateFk(query)));
            }
        } catch (AdsException ex) {
            throw new RuntimeException(ex);
        }
    }
    
    @Override
    public void translateUpdateFks(Form form) {
        ModelQuery query;
        
        // MOTIVO_APROVAO_REPROVA_ID
        try {
            if (form.hasFields("MTRA_MOTIVO", "MTRA_DESCRICAO")) {
                query = createQuery()
                        .select("MTRA.ID")
                        .from("MOTIVO_APROVA_REPROVA_ENSAIO", "MTRA")
                        .filter("MTRA.MOTIVO", form.get("MTRA_MOTIVO"))
                        .filter("MTRA.DESCRICAO", form.get("MTRA_DESCRICAO"))
                        ;
                base.setMotivoAprovaoReprovaId(ObjectUtil.toLong(translateFk(query)));
            }
        } catch (AdsException ex) {
            throw new RuntimeException(ex);
        }
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="LIST">
    public class FList extends ListFeature {
        
        @Override
        public void initForm() {
            addField(aPosicaoModelo, "view");
            addField(aDestino, "view");
            addField(aSituacao, "view");
            addField(aSituacaoInformada, "view");
            addField(aParecer, "view");
            addField(aNumeroSerie, "view");
        }
        
        {
            setFeatureName("LIST");
            setPrimary(false);
        }
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="VIEW">
    public class FView extends ViewFeature {
        
        @Override
        public void initForm() {
            addField(aPosicaoModelo, "view");
            addField(aDestino, "view");
            addField(aSituacao, "view");
            addField(aSituacaoInformada, "view");
            addField(aMtraMotivo, "view");
            addField(aMtraDescricao, "view");
            addField(aParecer, "view");
            addField(aNumeroSerie, "view");
        }
        
        {
            setFeatureName("VIEW");
            setPrimary(false);
        }
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="initFeatures">
    
    @Override
    protected void initFeatures() {
        addFeature(new FList());
        addFeature(new FView());
        super.initFeatures();
    }
    
    @Override
    public String getDefaultFeature() {
        return "LIST";
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="Getters and Setters">
    
    public Integer getPosicaoModelo() {
        return aPosicaoModelo.getValue();
    }
    
    public void setPosicaoModelo(Integer value) {
        this.aPosicaoModelo.setValue(value);
    }
    
    public String getDestino() {
        return aDestino.getValue();
    }
    
    public void setDestino(String value) {
        this.aDestino.setValue(value);
    }
    
    public String getSituacao() {
        return aSituacao.getValue();
    }
    
    public void setSituacao(String value) {
        this.aSituacao.setValue(value);
    }
    
    public String getSituacaoInformada() {
        return aSituacaoInformada.getValue();
    }
    
    public void setSituacaoInformada(String value) {
        this.aSituacaoInformada.setValue(value);
    }
    
    public String getParecer() {
        return aParecer.getValue();
    }
    
    public void setParecer(String value) {
        this.aParecer.setValue(value);
    }
    
    public String getNumeroSerie() {
        return aNumeroSerie.getValue();
    }
    
    public void setNumeroSerie(String value) {
        this.aNumeroSerie.setValue(value);
    }
    
    @Override
    public Long getId() {
        return aId.getValue();
    }
    
    public void setId(Long value) {
        this.aId.setValue(value);
    }
    
    public Long getEnsaioBancadaId() {
        return aEnsaioBancadaId.getValue();
    }
    
    public void setEnsaioBancadaId(Long value) {
        this.aEnsaioBancadaId.setValue(value);
    }
    
    public Long getMotivoAprovaoReprovaId() {
        return aMotivoAprovaoReprovaId.getValue();
    }
    
    public void setMotivoAprovaoReprovaId(Long value) {
        this.aMotivoAprovaoReprovaId.setValue(value);
    }
    
    public Long getHidrometroId() {
        return aHidrometroId.getValue();
    }
    
    public void setHidrometroId(Long value) {
        this.aHidrometroId.setValue(value);
    }
    
    public String getMtraMotivo() {
        return aMtraMotivo.getValue();
    }
    
    public void setMtraMotivo(String value) {
        this.aMtraMotivo.setValue(value);
    }
    
    public String getMtraDescricao() {
        return aMtraDescricao.getValue();
    }
    
    public void setMtraDescricao(String value) {
        this.aMtraDescricao.setValue(value);
    }
    
    public Long getParameterIdEnsaioBancada() {
        return pIdEnsaioBancada.getValue();
    }
    
    public void setParameterIdEnsaioBancada(Long value) {
        pIdEnsaioBancada.setValue(value);
        aEnsaioBancadaId.setValue(value);
    }
    // </editor-fold>
    
}
